package com.dys.teststreamapi11;

import java.util.stream.LongStream;

/**
 * @className: com.dys.teststreamapi11.StreamAPITest
 * @description: stream并行流和串行流对比
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/01 下午4:39
 */
public class StreamAPITest15 {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        streamToParallelOperator();
    }

    private static long times = 500000000;

    /**
     * 普通for执行效率
     */
    private static void testFor() {
        System.out.println("普通for循环......");
        long startTime = System.currentTimeMillis();
        long res = 0;
        for (int i = 0; i < times; i++) {
            res += i;
        }
        long endTime = System.currentTimeMillis();
        System.out.println("普通for执行消耗的时间：" + (endTime - startTime) + "ms");
    }

    /**
     * 串行流: 在一个线程上面执行
     */
    private static void streamToSerialStream() {
        System.out.println("串行流：serialStream");
        long startTime = System.currentTimeMillis();
        LongStream.rangeClosed(0, times).reduce(0, Long::sum);
        long endTime = System.currentTimeMillis();
        System.out.println("串行流执行消耗的时间：" + (endTime - startTime) + "ms");
    }

    /**
     * 并行流操作
     */
    private static void streamToParallelOperator() {
        System.out.println("并行流......");
        long startTime = System.currentTimeMillis();
        LongStream.rangeClosed(0, times).parallel().reduce(0, Long::sum);
        long endTime = System.currentTimeMillis();
        System.out.println("并行流执行消耗的时间：" + (endTime - startTime) + "ms");
    }

}
